package aceim.app.view.page.contactlist;
import java.util.List;
import aceim.api.dataentity.Buddy;
import aceim.api.dataentity.BuddyGroup;
import aceim.api.service.ApiConstants;
import aceim.app.MainActivity;
import aceim.app.R;
import aceim.app.dataentity.ProtocolResources;
import aceim.app.themeable.dataentity.ContactListItemThemeResource;
import aceim.app.utils.ViewUtils;
import aceim.app.view.page.contactlist.ContactListUpdater.ContactListModelGroup;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import com.androidquery.AQuery;
public abstract class ContactListAdapter extends BaseExpandableListAdapter {
protected final List<ContactListModelGroup> mGroupList;
protected final ProtocolResources mResources;
protected AQuery mAq = null;
public ContactListAdapter(List<ContactListModelGroup> groups, ProtocolResources resources) {
this.mGroupList = groups;
this.mResources = resources;
}
@Override
public ContactListModelGroup getGroup(int groupPosition) {
return mGroupList.get(groupPosition);
}
@Override
public int getGroupCount() {
return mGroupList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mGroupList.get(groupPosition).getBuddyList().size();
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
@Override
public Buddy getChild(int groupPosition, int childPosition) {
return mGroupList.get(groupPosition).getBuddyList().get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return getChild(groupPosition, childPosition).getId();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, final ViewGroup parent) {
final ContactListModelGroup g = getGroup(groupPosition);
View item;
if (convertView == null) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
item = (View) inflater.inflate(R.layout.group_header_item, null);
} else {
item = convertView;
}
if (mAq == null) {
mAq = new AQuery(item);
} else {
mAq.recycle(item);
}
mAq.id(android.R.id.text1).text(g.getName());
mAq.id(android.R.id.text2).text(getOnlinesOfflinesText(parent.getContext(), g));
if (g.isCollapsed()) {
((ExpandableListView) parent).collapseGroup(groupPosition);
} else {
((ExpandableListView) parent).expandGroup(groupPosition);
}
item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
g.setCollapsed(!g.isCollapsed());
if (g.isCollapsed()) {
((ExpandableListView) parent).collapseGroup(groupPosition);
} else {
((ExpandableListView) parent).expandGroup(groupPosition);
}
}
});
if (!g.isPredefined()) {
item.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
((MainActivity)parent.getContext()).onBuddyGroupContextMenuRequest(g, mResources);
return true;
}
});
}
return item;
}
private String getOnlinesOfflinesText(Context context, BuddyGroup parent) {
int onlines = 0;
int offlines = 0;
for (Buddy b : parent.getBuddyList()) {
if (b.getOnlineInfo().getFeatures().getByte(ApiConstants.FEATURE_STATUS, (byte) -1) > -1) {
onlines++;
} else {
offlines++;
}
}
StringBuilder contentText = new StringBuilder();
if (onlines > 0) {
contentText.append(onlines);
contentText.append(" ");
contentText.append(context.getString(R.string.online));
}
if (onlines > 0 && offlines > 0) {
contentText.append(", ");
}
if (offlines > 0) {
contentText.append(offlines);
contentText.append(" ");
contentText.append(context.getString(R.string.offline));
}
return contentText.toString();
}
protected View constructChildViewFromThemeResource(int groupPosition, int childPosition, boolean isLastChild, View convertView, final ViewGroup parent, ContactListItemThemeResource ctr) {
Buddy buddy = getChild(groupPosition, childPosition);
View view = convertView;
if (convertView == null) {
view = ctr.getView();
}
if (view.getTag() == null || view.getTag() != buddy) {
view.setTag(buddy);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity activity = (MainActivity) parent.getContext();
Buddy buddy = (Buddy) v.getTag();
activity.onChatRequest(buddy);
}
});
view.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
MainActivity activity = (MainActivity) parent.getContext();
Buddy buddy = (Buddy) v.getTag();
activity.onBuddyContextMenuRequest(buddy, mResources);
return true;
}
});
}
ViewUtils.fillBuddyPlaceholder(parent.getContext(), buddy, view, mResources, ctr, childPosition, groupPosition, (AbsListView) parent);
//mAq.recycle(view);
//ViewUtils.fillBuddyPlaceholder(parent.getContext(), buddy, mAq, mResources, ctr);
return view;
}
}